接下來的幾天好像有可能一直下雨呢有夠悲劇,搬離台北太久都快忘了冬天被濕氣籠罩的恐懼了。
亂看時發現了 apple 的另一個 tutorial,內容看起來比之前只講 swift UI 的詳細很多,甚至還有 macOS 開發相關,必須先丟入收藏夾裡存起來。
cache 是很常見的技術,不只應用層,系統層也經常用這個技巧來優化效能,而iOS 當然也不例外。
其中一個 cache 方式就是 NSCache,使用方式像下面所示。NSCache 會自動管理 cache,可以設定 cache object 的數量和大小,如果 cache 量太多時會自動進行清理。
let cache = NSCache<NSString, UIImage>()
cache.setObject(image, forKey: "imageKey")
let cachedImage = cache.object(forKey: "imageKey")
URL Cache 也是一種,如名字所示,會把 URL request 去對應到 cache 起來的 response object,這個還提供了 in-memory 和 on-disk 的 cache。如果要儲存 cache 的話,會複寫 storeCacheResponse,拿取時使用 getCachedResponse,移除掉 cache 則用 removeCachedResponse。
let cache = URLCache(memoryCapacity: 512 * 1024, diskCapacity: 10 * 1024 * 1024, diskPath: "myCache")
下面則是官網的使用範例:
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask,
willCacheResponse proposedResponse: CachedURLResponse,
completionHandler: @escaping (CachedURLResponse?) -> Void) {
if proposedResponse.response.url?.scheme == "https" {
let updatedResponse = CachedURLResponse(response: proposedResponse.response,
data: proposedResponse.data,
userInfo: proposedResponse.userInfo,
storagePolicy: .allowedInMemoryOnly)
completionHandler(updatedResponse)
} else {
completionHandler(proposedResponse)
}
}